iT邦幫忙

2024 iThome 鐵人賽

DAY 2
1
佛心分享-SideProject30

RISC-V CPU 設計與實作系列 第 2

[Day 02] IC 設計流程

  • 分享至 

  • xImage
  •  

從最開始的架構發想、電路設計到 layout 的生成都是一個 IC 設計必備的流程。至於有哪些呢?我們往下說下去。

系統規格

首先我們要先決定這個 IC 的定位是什麼?可能是用於加速 AI 運算的特殊用途晶片,或是支援高速加解密的晶片。以本系列文來說就是一個 CPU 。再來就是決定更細節的規格,例如,CPU 支援的指令集是哪一個,支援的指令有哪些?當一切準備就緒,我們才開始「設計」。

之所以要訂定系統規格是因為設計 IC 的也許是一個人,但更大的可能是一個團隊。團隊中,每個人的想法一定都有出入。以算數邏輯單元 (ALU) 來說,內部肯定支援多種功能,像是「且」、「或」、「加法」等,那麼我們怎麼判斷當前選定的功能?此時,我們就需要一個規格,訂定選擇線 0, 1, 2, ... 分別為何種功能。這只是一個很小的例子,但是若沒有溝通好就足以讓晶片發生問題了!

電路設計(前端)

設計電路時,我們通常會使用 Verilog 或是 VHDL 這兩種硬體描述語言 (Hardware Description Language, HDL) 。VHDL 多為歐洲國家所使用,因此在這個系列文中,我們會以 Verilog 來實作 RISC-V CPU。

Verilog 設計電路時,大概可以分成 3 個層級。最底層的稱為 Gate Level,此時我們會以描述邏輯閘的相接情況來設計電路。接著是 Dataflow Level,這個層級我們會專注在描述資料的流向,例如,assign a = b & c 代表我們將 bc 做且運算後,將答案流向 a 。最高層級是 Behavioral Level ,此時我們可以透過更抽象的方式來描述電路,例如在設計多工器時,我們可以透過 if, else 來表達多工器的行為。

電路模擬(前端)

設計電路後,我們要先驗證設計是否正確。此時我們會透過撰寫測試檔 (testbench) 來傳遞我們的輸入資料,並將結果透過波形圖輸出。波形圖中,我們可以看到電路的各個元件、各條電線、各個暫存器在不同時間所流過的資料為何。

電路合成(前端)

在這個階段,我們需要將 Verilog Code 都轉換成 Gate Level 的形式。但是這對於我們來說非常的困難,因此我們會借助 EDA 工具來完成電路合成。其中以 Synopsys 推出的 Design Compiler 最為知名。這個工具會根據我們的製程和需求將 Verilog 轉換為最合適的 Gate Level 電路,並作最佳化。

舉例來說,電路中的 Or-Gate 永遠連接高電位,那麼這個邏輯閘基本上是毫無作用的,因為輸出必為高電位。再舉另一個例子,這個敘述 a & b & c 應該用兩個邏輯閘來完成呢?還是一個 3-input 的邏輯閘呢?這些事情都會在電路合成階段為我們完成。

最終,我們會得到 Gate Level Netlist ,前端設計也到此結束。

後端設計

在此之前的步驟我們都稱之為「前端」,接下來我們要將剛剛取得的 netlist 繪製成 layout。負責後端設計的工具有 Synopsys 的 IC Compiler II, Cadence 的 Innovus 等。

雖然就短短的一句話就可以概括這個階段,但著實不容易啊!這其中包括了佈局、繞線、時脈的合成等。如果佈局的不恰當,在繞線時,可能會導致電線沒有適當的路線可以放。此時,就會發生「繞線塞車」的問題。因此整個後端設計其實非常不簡單,需要包含豐富的經驗和理論知識才有辦法完成。

後續

當取得 layout 後,我們就可以交由台積電或是聯電等公司為我們製造出晶片。layout 就想是晶片的草稿圖、構造圖,製造方會根據上面的敘述完成晶片製造,並交由封裝廠商完善最後的部分。

本系列文會專注在電路設計的部分,也就是 Verilog 的撰寫。


上一篇
[Day 01] RISC-V 簡介
下一篇
[Day 03] 淺談 Verilog
系列文
RISC-V CPU 設計與實作6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言